#include "StringMatch.h"
namespace GxLibBasic
{
	bool IsNumber(wchar_t c)
	{
		return (c>=L'0' && c<= L'9');
	}

	bool FloatParser::MatchFloat( String str )
	{
		bool Neg = false;
		int pos = 0;
		int status = 0;
		if (str[pos] == L'-')
		{
			Neg = true;
			pos ++;
		}
		else if (str[pos] == L'+')
		{
			Neg = false;
			pos ++;
		}
		bool dotted = false;
		if (str[pos] == L'.')
			dotted = true;
		if (!IsNumber(str[pos]))
			return false;
		bool HasExp = false;
		while (pos<str.GetLength())
		{
			if (!IsNumber(str[pos]))
			{
				if (str[pos] == L'e' || str[pos] == L'E')
				{
					pos ++;
					HasExp = true;
					break;
				}
				else if (!dotted && str[pos] == L'.')
				{
					dotted = true;
					pos ++;
				}
				else
					return false;
			}
			pos ++;
		}
		if (!HasExp)
			return true;
		if (str[pos] == L'-')
		{
			Neg = true;
			pos ++;
		}
		else if (str[pos] == L'+')
		{
			Neg = false;
			pos ++;
		}
		if (!IsNumber(str[pos]))
			return false;
		while (pos<str.GetLength())
		{
			if (!IsNumber(str[pos]))
			{
				return false;
			}
			pos ++;
		}
		return true;
	}
}